package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.RepDetCruceVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;


public class RepDetCruceDAO {

    private Connection conn = null;
    private ConnectionFactory cf;
    
    public RepDetCruceDAO(ConnectionFactory cf) {
        this.cf = cf;
        try{
          this.conn = this.cf.getConnection();
        }catch(Exception e){}
    }
    
    public ArrayList getBeneficiariosCruce(RepDetCruceVO criterea) throws SQLException {
        String query = "";

    if(!criterea.getDesde().equals("") && !criterea.getHasta().equals("")){
        if(criterea.getCodeSubprogramaFuente() != null){
            if(criterea.getInclusion().equals("Ambos")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente()+" AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+ 
                    " INTERSECT\n" +
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino()+ " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')";
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() +" AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+   
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino()+ "AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')"; 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO, programa.NOMBRE NOMBREPROGRAMA, subprograma.NOMBRE NOMBRESUBPROGRAMA " + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa\n" + 
                    "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    "                                 otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                 subprograma.codigo = "+criterea.getCodeSubprogramaFuente()+" AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')) bene "+ 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo = programa.codigo AND\n" +
                    " subprograma.codigo <> "+criterea.getCodeSubprogramaFuente();
                }
            }
            else if(criterea.getInclusion().equals("SoloFuente")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " MINUS\n" +
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino()+" AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') ";
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+ 
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino() + " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "; 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO \n" + 
                    " FROM tcs_ben_beneficiario beneficiario,tcs_ben_beneficio_otorgado otorgado \n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+ 
                    " MINUS\n" + 
                    " SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO "+
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    "                                 otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente()+ " AND\n" + 
                    "                                 otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')) bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = " +criterea.getCodeSubprogramaFuente()+ " AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene";
                }
            }
        }else{
            if(criterea.getInclusion().equals("Ambos")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO" +
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+ " AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') AND "+
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino();
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+ " AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino()+ " AND " +
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')"; 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO, programa.NOMBRE NOMBREPROGRAMA, subprograma.NOMBRE NOMBRESUBPROGRAMA " + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                    " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                    "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                   otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') AND "+
                    "                                   subprograma.prg_codigo ="+criterea.getCodeProgramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo = programa.codigo AND\n" +
                    " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente()+" AND\n" + 
                    " subprograma.prg_codigo = programa.codigo";
                }
            }
            else if(criterea.getInclusion().equals("SoloFuente")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" +
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+ " AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado " + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino()+" AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')";
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+ " AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino()+ " AND "+
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')"; 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO \n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+" AND\n" + 
                    " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') "+
                    " MINUS\n" + 
                    " SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO \n" + 
                    " FROM tcs_ben_beneficiario beneficiario,tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                    "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                   otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') AND "+
                    "                                   subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente();
                    
                }
            }
        }
    }else{
        if(criterea.getCodeSubprogramaFuente() != null){
            if(criterea.getInclusion().equals("Ambos")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + 
                    " INTERSECT\n" +
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino();
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() +  
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino(); 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO, programa.NOMBRE NOMBREPROGRAMA, subprograma.NOMBRE NOMBRESUBPROGRAMA \n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    "                                 otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                 subprograma.codigo = "+criterea.getCodeSubprogramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo = programa.codigo AND\n" + 
                    " subprograma.codigo <> "+criterea.getCodeSubprogramaFuente();
                }
            }
            else if(criterea.getInclusion().equals("SoloFuente")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + 
                    " MINUS\n" +
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino();
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() +  
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino(); 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario,tcs_ben_beneficio_otorgado otorgado \n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente() + 
                    " MINUS\n" + 
                    " SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado \n" + 
                    "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    "                                 otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo <> "+criterea.getCodeSubprogramaFuente()+ " AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene"; 
                    
                }
            }
        }else{
            if(criterea.getInclusion().equals("Ambos")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado " + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino();
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+
                    " INTERSECT\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino(); 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO, programa.NOMBRE NOMBREPROGRAMA, subprograma.NOMBRE NOMBRESUBPROGRAMA " + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                    " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                    "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                   subprograma.prg_codigo ="+criterea.getCodeProgramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente()+" AND\n" + 
                    " subprograma.prg_codigo = programa.codigo";
                }
            }
            else if(criterea.getInclusion().equals("SoloFuente")){
                if(criterea.getCodeSubprogramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO" +
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado " + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = "+criterea.getCodeSubprogramaDestino();
                    
                }else if (criterea.getCodeProgramaDestino() != null){
                
                    query = "SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+
                    " MINUS\n" + 
                    " SELECT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, \n" + 
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO\n" + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaDestino(); 
                }else{
                    query = "SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE, " +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO " + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                    " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+
                    " MINUS\n" + 
                    " SELECT DISTINCT  beneficiario.NUMERO_DOCUMENTO NUMERODOCUMENTO, beneficiario.TIPO_DOCUMENTO TIPODOCUMENTO, beneficiario.PRIMER_NOMBRE PRIMERNOMBRE," +
                    " beneficiario.SEGUNDO_NOMBRE SEGUNDONOMBRE, beneficiario.PRIMER_APELLIDO PRIMERAPELLIDO, beneficiario.SEGUNDO_APELLIDO SEGUNDOAPELLIDO " + 
                    " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                    " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                    "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                    "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                    "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    "                                   subprograma.prg_codigo = "+criterea.getCodeProgramaFuente()+") bene\n" + 
                    " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                    " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                    " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                    " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente();
                }
            }
        }
    }
        
        ResultSet rst = null;
        rst = cf.getRecordsRset(query,null,conn);
        
        BeneficiarioVO bene = null;
        ArrayList beneficiarios = new ArrayList();
        
        if(criterea.getCodeProgramaDestino() == null && criterea.getCodeSubprogramaDestino() == null && criterea.getInclusion().equals("Ambos")){
            while ( rst.next() ) 
            {
                bene = new BeneficiarioVO();
                bene.setNumeroDocumento(rst.getString( "NUMERODOCUMENTO"));
                bene.setTipoDocumento(rst.getString( "TIPODOCUMENTO"));
                bene.setNombre1(rst.getString( "PRIMERNOMBRE"));
                bene.setNombre2(rst.getString( "SEGUNDONOMBRE"));
                bene.setPrimerApellido(rst.getString( "PRIMERAPELLIDO"));
                bene.setSegundoApellido(rst.getString( "SEGUNDOAPELLIDO"));
                bene.setPrograma(rst.getString( "NOMBREPROGRAMA"));
                bene.setBeneficio(rst.getString("NOMBRESUBPROGRAMA"));
                beneficiarios.add(bene);
                bene=null;
            }
        }else{
            while ( rst.next() ) 
            {
                bene = new BeneficiarioVO();
                bene.setNumeroDocumento(rst.getString( "NUMERODOCUMENTO"));
                bene.setTipoDocumento(rst.getString( "TIPODOCUMENTO"));
                bene.setNombre1(rst.getString( "PRIMERNOMBRE"));
                bene.setNombre2(rst.getString( "SEGUNDONOMBRE"));
                bene.setPrimerApellido(rst.getString( "PRIMERAPELLIDO"));
                bene.setSegundoApellido(rst.getString( "SEGUNDOAPELLIDO"));
                beneficiarios.add(bene);
                bene=null;
            }
        }
        
        rst.close();

        return beneficiarios;        
    }
    
    public Long getCantidadBeneficiarios(RepDetCruceVO criterea) throws SQLException {
        String query = "";

        if(!criterea.getDesde().equals("") && !criterea.getHasta().equals("")){
            if(criterea.getCodeSubprogramaFuente() != null){
                if(criterea.getInclusion().equals("Ambos")){
                    if(criterea.getCodeSubprogramaDestino() == null && criterea.getCodeProgramaDestino() == null){
                    query = "SELECT COUNT(DISTINCT  beneficiario.CODIGO) CantidadBeneficiarios" +
                        " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                        "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa\n" + 
                        "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        "                                 otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        "                                 subprograma.codigo = "+criterea.getCodeSubprogramaFuente()+" AND " +
                        " otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy')) bene "+ 
                        " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                        " subprograma.prg_codigo = programa.codigo AND\n" +
                        " subprograma.codigo <> "+criterea.getCodeSubprogramaFuente();
                    }
                }
            }else{
                if(criterea.getInclusion().equals("Ambos")){
                    if(criterea.getCodeSubprogramaDestino() == null && criterea.getCodeProgramaDestino() == null){
                    query = "SELECT COUNT(DISTINCT  beneficiario.CODIGO) CantidadBeneficiarios" +
                        " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                        " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                        "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                        "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                        "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        "                                   otorgado.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/yyyy') and to_date('"+criterea.getHasta()+"','dd/mm/yyyy') AND "+
                        "                                   subprograma.prg_codigo ="+criterea.getCodeProgramaFuente()+") bene\n" + 
                        " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                        " subprograma.prg_codigo = programa.codigo AND\n" +
                        " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente()+" AND\n" + 
                        " subprograma.prg_codigo = programa.codigo";

                    }
                }
            }
        }else{
            if(criterea.getCodeSubprogramaFuente() != null){
                if(criterea.getInclusion().equals("Ambos")){
                    if(criterea.getCodeSubprogramaDestino() == null && criterea.getCodeProgramaDestino() == null){
                    query = "SELECT COUNT(DISTINCT  beneficiario.CODIGO) CantidadBeneficiarios" +
                        " FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, tcs_ben_programa programa, (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                        "                           FROM tcs_ben_beneficiario beneficiario, tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                        "                           WHERE beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        "                                 otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        "                                 subprograma.codigo = "+criterea.getCodeSubprogramaFuente()+") bene\n" + 
                        " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                        " subprograma.prg_codigo = programa.codigo AND\n" + 
                        " subprograma.codigo <> "+criterea.getCodeSubprogramaFuente();
                        
                    }
                }
            }else{
                if(criterea.getInclusion().equals("Ambos")){
                    if(criterea.getCodeSubprogramaDestino() == null && criterea.getCodeProgramaDestino() == null){
                    query = "SELECT COUNT(DISTINCT  beneficiario.CODIGO) CantidadBeneficiarios" +
                        " FROM tcs_ben_beneficiario beneficiario, tcs_ben_programa programa, \n" + 
                        " tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma, \n" + 
                        "                           (SELECT distinct otorgado.ben_codigo codigoBene\n" + 
                        "                                   FROM tcs_ben_beneficio_otorgado otorgado, tcs_ben_subprograma subprograma\n" + 
                        "                                   WHERE otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        "                                   subprograma.prg_codigo ="+criterea.getCodeProgramaFuente()+") bene\n" + 
                        " WHERE  beneficiario.codigo = otorgado.ben_codigo AND\n" + 
                        " otorgado.sbpr_codigo = subprograma.codigo AND\n" + 
                        " otorgado.ben_codigo = bene.codigoBene AND\n" + 
                        " subprograma.prg_codigo <> "+criterea.getCodeProgramaFuente()+" AND\n" + 
                        " subprograma.prg_codigo = programa.codigo";

                    }
                }
            }
        }
            
            ResultSet rst = null;
            rst = cf.getRecordsRset(query,null,conn);
            
            rst.next();

            return (new Long(rst.getLong("CantidadBeneficiarios")));
            
    }
    
    public RepDetCruceVO getFilters(RepDetCruceVO objRepDetCruce)throws SQLException
    {
        String strQuery = null;
        ResultSet rst = null;
        
        if(objRepDetCruce.getCodeProgramaFuente() != null)
        {
            strQuery = "SELECT NOMBRE" +
                       " FROM TCS_BEN_PROGRAMA" +
                       " WHERE CODIGO = " + objRepDetCruce.getCodeProgramaFuente();
            rst = cf.getRecordsRset(strQuery,null,conn);
            rst.next();
            
            objRepDetCruce.setNombreProgramaFuente(rst.getString("NOMBRE"));
        }
            if(objRepDetCruce.getCodeSubprogramaFuente() != null)
            {
            strQuery = "SELECT NOMBRE" +
                       " FROM TCS_BEN_SUBPROGRAMA" +
                       " WHERE CODIGO = " + objRepDetCruce.getCodeSubprogramaFuente();
            rst = cf.getRecordsRset(strQuery,null,conn);
            rst.next();
            
            objRepDetCruce.setNombreSubprogramaFuente(rst.getString("NOMBRE"));
        }
        if(objRepDetCruce.getCodeProgramaDestino() != null)
        {
          strQuery = "SELECT NOMBRE" +
                     " FROM TCS_BEN_PROGRAMA" +
                     " WHERE CODIGO = " + objRepDetCruce.getCodeProgramaDestino();
          rst = cf.getRecordsRset(strQuery,null,conn);
          rst.next();
          
          objRepDetCruce.setNombreProgramaDestino(rst.getString("NOMBRE"));
        }
        if(objRepDetCruce.getCodeSubprogramaDestino() != null)
        {
          strQuery = "SELECT NOMBRE" +
                     " FROM TCS_BEN_SUBPROGRAMA" +
                     " WHERE CODIGO = " + objRepDetCruce.getCodeSubprogramaDestino();
          rst = cf.getRecordsRset(strQuery,null,conn);
          rst.next();
          
          objRepDetCruce.setNombreSubprogramaDestino(rst.getString("NOMBRE"));
        }
        if(rst != null)
            rst.close();
        
        return objRepDetCruce;
        }
    
    public Connection getConn()
    {
      return conn;
    }
}
